# lco Makefile
# Copyright (C) 2018 Ariadne Devos
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

CC := gcc
ARCH := x86-64
CFLAGS := -g3 -O3
OBJECTS := lco.o lco-$(ARCH).o

test: tests/fibonacci-check

lco.o: lco.c lco.h
	$(CC) $(CFLAGS) -o lco.o -c lco.c

lco-$(ARCH).o: lco-$(ARCH).S
	$(CC) -o lco-$(ARCH).o -c lco-$(ARCH).S

tests/%-bin.o: tests/%-test.c lco.h
	$(CC) $(CFLAGS) -o $@ -c $<

tests/%-bin: tests/%-bin.o $(OBJECTS)
	$(CC) $(CFLAGS) -o $@ $^

tests/%-out: tests/%-bin
	$< > $@.tmp && mv $@.tmp $@

tests/%-check: tests/%-out tests/%-data
	cmp ./tests/fibonacci-out tests/fibonacci-data && touch "$@"
